package com.chentf.spring.annotation;

import com.chentf.spring.annotation.config.MainConfigOfLifeCycle;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class IOCTest_LifeCycle {

    /**
     * 对于单实例bean来说，会在Spring容器启动的时候创建对象；对于多实例bean来说，会在每次获取bean的时候创建对象。
     * 在Spring容器中，先是调用了Car类的构造方法来创建Car对象，接下来便是调用了Car对象的init()方法来进行初始化。
     */
    @Test
    public void test01() {
        // 创建IOC容器
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
        System.out.println("容器创建完成...");

        applicationContext.getBean("car"); // 多实例bean在获取的时候才创建对象

        // 关闭容器 多实例的bean在容器关闭的时候是不进行销毁的
//        applicationContext.close();
    }

    @Test
    public void test02() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
        System.out.println("容器创建完成...");
        System.out.println("------------");

        // 调用时创建对象
        final Object bean  = applicationContext.getBean("cat");
        System.out.println("-------------");

        // 调用时创建对象
        Object bean1 = applicationContext.getBean("cat");
        System.out.println("-------------");
        System.out.println(bean == bean1);

        // 关闭容器
        applicationContext.close();
    }
}
